package seguranca;

import daos.UsuarioDAO;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import negocio.Erros;
import negocio.NegocioException;


public abstract class ProxyBase implements InvocationHandler {
    
    protected Erros erros;
    
    public ProxyBase() {
        erros = new Erros();
    }
    
    public abstract String getMensagemAutenticacao();
    
    public UsuarioDAO getUsuarioAutenticado() {
        return Credencial.getUsuarioLogado();
    }
    
    public void validarUsuarioAutenticado() throws NegocioException {
        erros.limpar();
        if (getUsuarioAutenticado() == null) {
            erros.adicionarErro(getMensagemAutenticacao());
            throw new NegocioException(erros);
        }
    }
    
    protected Object executarMetodo(Object objReal, Method method, 
    		Object[] args)throws NegocioException {
        try {
            return method.invoke(objReal,args);
        } catch (IllegalArgumentException ex) {
            throw new NegocioException(ex.getMessage());
        } catch (InvocationTargetException ex) {
            if (ex.getTargetException() instanceof NegocioException) {
                throw (NegocioException)(ex.getTargetException());
            } else {
                throw new NegocioException(ex.getTargetException().getMessage());
            }
        } catch (IllegalAccessException ex) {
            throw new NegocioException(ex.getMessage());
        }
    }
}